package com.bridgeintelligent.tag.webserver.dim.mgmt.api;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;

import java.util.Date;
import java.util.Objects;

/**
 * Created by JackCheung on 2019/9/9 8:40 PM.
 * 删除  issamebu->isrent 字段
 */
@Getter
@Setter
@Accessors(chain = true)
public class DimData {

    private String dimId;//标签id
    private String dimName;//标签名
    private String dimLargeType;//标签大类 基础标签、自定义标签  01表示基础标签,02表示自定义标签 03数值标签,04组合标签
    private String businessType;
    private String classify;//标签小类  用于标示指标类等标签  指标类等标签属于基础标签  01描述型  02标志型   03数值型   04标识型   05日期型   06集合型
    private String theme;//标签主题
    private String definition;//标签定义
    private String caliber;//产出规则
    private String scenarios;//应用场景
    private String catalogId;//存储目录ID
    private String state;//状态  标签状态:01表示启用中,02表示停用,03表示停用,04待审批
    private String createTime;//创建事件
    private String uptTime;//更新日期
    private String businessLeader;//业务负责人
    private String skillLeader;//技术负责人
    private String createrId;//创建人id
    private String validTime;//有效日期
    private Integer custAmount;//客户数
    private String updataCycle;//更新周期 更新周期:d表示每日更新,m表示每月更新,w表示每周更新
    private String dataSource;//数据来源
    private String rule;
    private String approver;//审批人
    private String custList;//客户清单 自定义标签独有
    private String approveDate;//审批日期
    private String department;//部门
    private String sourcesDb;//数据库
    private String sourcesTable;//数据表
    private String sourcesColumn;//来源字段
    private String dimActualFields;//标签库实际字段
    private float dimSaturation;//饱和度
    //    private boolean issamebu;//      是否同业重点关注
//    private boolean iscompany;//     是否公司重点关注'
//    private boolean isrisk;//   是否风险部重点关注
//    private boolean ispocust;// 是否适用潜客
//    private boolean isgroup;//是否适用集团
//    private boolean isbank;// 适用银行
//    private boolean isinsure;// 适用保险
//    private boolean isbond;//  适用证券
//    private boolean isendow;// 适用养老
//    private boolean isrent;//  适用租赁lds},
    private String showType;//展示规则
    private String approveState;//审批状态 2待审核 3被驳回 4 通过
    private String businessDepartment;//业务部门
    private String skillDepartment;//技术部门
    private String catalogName;//目录名称
    private String classifyCNName;//分类名
    private String skillDepartmentCNName;//技术部门名
    private String businessDepartmentCNName;//业务部门名
    private String dataSourceCNName;//数据来源名
    private String themeCNName;//主题名
    private String createrCNName;//创建名
    private String approveStateName;//审批状态名
    private String approveType;//审批类型
    private String approveTypeName;//审批类型名
    private boolean iscollect;//是否包含
    private String partCustList;//当新增、删除客户清单时的客户文件路径
    private boolean isDataRunning;//是否有数据在跑批
    private String fileDescription;//上传文件描述
    private Boolean isrecommended;//是否推荐
    private boolean isnew;//是否两月内
    //标签序号
    private int sortNum;
    private boolean isWorking;//是否投产
    private String tagGroup;//标签组
    private String isTagFlag;//是否现成标签
    private String defaultValue;//标签缺省值
    private String orgNo;//标签所属机构号
    private String tagSourceType;//标签来源类型
    private String outputMethod;//产出办法
    private String belongTo;//标签归属方
    private String systemCode;//系统代码
    private String businessDefine;//标签含义解释
    private String savePath;//存储地址
    private String tagCustType;//数据表客户类型
    private String timeCycle;//时间周期
    private String skill_classify;//技术分类
    private String colName;//默认英文名称
    private String mineId;//收藏表的ID
    // 标签列表所需字段
    @JsonProperty(value = "isTag")
    private boolean isTag;
    private String name;
    // 饱和度
    private String bhdPercent;
    private Long assessScore;

    // 共享逻辑状态
    private String sharedState;
    @ApiModelProperty(value = "一级分类")
    private String first;
    @ApiModelProperty(value = "二级分类")
    private String second;
    @ApiModelProperty(value = "数据状态 0 等待 1 成功 2 失败")
    private String dataState;
    /**
     * 生效日期->
     */
    private String effectiveTime;
    @ApiModelProperty(value = "文件上传是否异常标志")
    private Integer fileCode;


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DimData dimData = (DimData) o;
        return sortNum == dimData.sortNum && Objects.equals(dimId, dimData.dimId) && Objects.equals(dimName, dimData.dimName) && Objects.equals(classify, dimData.classify) && Objects.equals(definition, dimData.definition) && Objects.equals(scenarios, dimData.scenarios) && Objects.equals(businessLeader, dimData.businessLeader) && Objects.equals(updataCycle, dimData.updataCycle) && Objects.equals(dataSource, dimData.dataSource) && Objects.equals(sourcesDb, dimData.sourcesDb) && Objects.equals(sourcesColumn, dimData.sourcesColumn) && Objects.equals(showType, dimData.showType) && Objects.equals(businessDepartment, dimData.businessDepartment) && Objects.equals(isTagFlag, dimData.isTagFlag) && Objects.equals(defaultValue, dimData.defaultValue) && Objects.equals(orgNo, dimData.orgNo) && Objects.equals(tagSourceType, dimData.tagSourceType) && Objects.equals(belongTo, dimData.belongTo) && Objects.equals(tagCustType, dimData.tagCustType) && Objects.equals(timeCycle, dimData.timeCycle);
    }

    @Override
    public int hashCode() {
        return Objects.hash(dimId, dimName, classify, definition, scenarios, businessLeader, updataCycle, dataSource, sourcesDb, sourcesColumn, showType, businessDepartment, sortNum, isTagFlag, defaultValue, orgNo, tagSourceType, belongTo, tagCustType, timeCycle);
    }

    public String getStatus(){
        String current = DateFormatUtils.format(new Date(), "yyyy-MM-dd");
        if(((!(StringUtils.equals(dimLargeType,"02")||StringUtils.equals(dimLargeType,"04")))
                ||StringUtils.compare(validTime, current)>=0)&&!StringUtils.equals(state,"02")){
            if(StringUtils.equals(dimLargeType,"02")
                    &&StringUtils.equals(dataState, "0")){
                // 数据准备中
                return "02";
            }
            if(StringUtils.equals(dimLargeType,"04")
            &&StringUtils.equals(dataState, "0")&&StringUtils.equals(approveState, "4")){
                // 数据准备中
                return "02";
            }
            if(StringUtils.equals(dimLargeType,"04")&&StringUtils.equals(dataState, "2")){
                // 数据准备失败
                return "00";
            }
            return "01";
        }
        return "00";
    }
}
